home *** CD-ROM | disk | FTP | other *** search
- /* misc.c */
-
- /* Copyright © 1989 by Donald T. Meyer, Stormgate Software
- * All Rights Reserved
- */
-
-
-
- #include "rxil.h"
-
-
-
- /* NAME
- * RxilGetReturn
- *
- * SYNOPSIS
- * rxi = RxilGetReturn();
- *
- * struct RxilInvocation *rxi;
- *
- * FUNCTION
- * This will return a pointer to any RxilInvocation message
- * that has been replyed (but not yet cleaned up and available).
- * NULL will be returned if all RxilInvocation structures which have
- * been allocated are available or pending.
- *
- * INPUTS
- * None
- *
- * RESULT
- * A pointer to a RxilInvocation structure. If none have been
- * replied and are available to be handled, this will return a NULL.
- *
- * SIDES
- *
- * HISTORY
- * 01-Aug-89 Creation.
- *
- * BUGS
- *
- * SEE ALSO
- *
- */
-
- struct RxilInvocation *RxilGetReturn( void )
- {
- struct RxilInvocation *rxi;
-
-
- /* Make call "safe" even if RxilInit() failed */
- if( global_rdef == NULL )
- {
- return( NULL );
- }
-
-
- for( rxi=global_rdef->Invocations; rxi; rxi=rxi->Next )
- {
- if( rxi->State == RXIL_STATE_RETURNED )
- {
- return( rxi );
- }
- }
-
- return( NULL );
- }
-
-
-
- /* NAME
- * RxilCleanupReturn
- *
- * SYNOPSIS
- * RxilCleanupReturn( rxi );
- *
- * struct RxilInvovcation *rxi;
- *
- * FUNCTION
- * This will take a pointer to a RxilInvocation structure and
- * free what needs to be freed.
- * The RexxMsg pointer is then NULL'ed and the structure's state
- * set to AVAILABLE.
- *
- * This should be called by the main program to cleanup after
- * a function or command has returned and after the main program
- * has done whatever it wanted to with the result.
- * This will close the extension filehandles for Stdin and Stdout.
- *
- * INPUTS
- * rxi = pointer to the RxilInvocation structure to be cleaned up.
- *
- * RESULT
- * None
- *
- * SIDES
- *
- * HISTORY
- * 01-Aug-89 Creation.
- *
- * BUGS
- *
- * SEE ALSO
- * RxilCreateRxi(), RxilDeleteRxi(), RxilGetReturn()
- */
-
- void RxilCleanupReturn( struct RxilInvocation *rxi )
- {
- struct RexxMsg *rexxmsg = rxi->RexxMsg;
- int i;
-
-
- RxilCloseConsole( rexxmsg );
-
- if( ( rexxmsg->rm_Result1 == 0 ) && ( rexxmsg->rm_Result2 != 0 ) )
- {
- /* Free up the result string */
- DeleteArgstring( (struct RexxArg *)rexxmsg->rm_Result2 );
- }
-
-
- /* We always delete the name string argument */
- DeleteArgstring( (struct RexxArg *)(ARG0(rexxmsg)) );
-
- /* If a function invocation, free up any and all arguments */
- if( ( rexxmsg->rm_Action & RXCODEMASK ) == RXFUNC )
- {
- for( i=1; i<=(rexxmsg->rm_Action & RXARGMASK); i++ )
- {
- if( rexxmsg->rm_Args[i] != NULL )
- {
- DeleteArgstring( (struct RexxArg *)
- (rexxmsg->rm_Args[i]) );
- }
- }
- }
-
- DeleteRexxMsg( rexxmsg );
- rxi->RexxMsg = NULL;
-
- rxi->State = RXIL_STATE_AVAILABLE;
- }
-
-
-
- /* NAME
- * RxilPending
- *
- * SYNOPSIS
- * flag = RxilPending();
- *
- * FUNCTION
- * If any ARexx functions or commands have been launched via
- * a call to RxilLaunch(), and have not yet terminated, this will
- * return TRUE.
- *
- * INPUTS
- * None
- *
- * RESULT
- * A boolean flag which indicates if any launches are in progress.
- *
- * SIDES
- *
- * HISTORY
- * 01-Aug-89 Creation.
- *
- * BUGS
- *
- * SEE ALSO
- * RxilLaunch(), RxilCmdPending(), RxilFuncPending()
- */
-
- BOOL RxilPending( void )
- {
- struct RxilInvocation *rxi;
-
-
- /* Make call "safe" even if RxilInit() failed */
- if( global_rdef == NULL )
- {
- return( FALSE );
- }
-
-
- for( rxi=global_rdef->Invocations; rxi; rxi=rxi->Next )
- {
- if( rxi->State == RXIL_STATE_PENDING )
- {
- return( TRUE );
- }
- }
-
- return( FALSE );
- }
-
-
-
- /* NAME
- * RxilCmdPending
- *
- * SYNOPSIS
- * flag = RxilCmdPending();
- *
- * FUNCTION
- * If any ARexx commands have been launched via
- * a call to RxilLaunch(), and have not yet terminated, this will
- * return TRUE.
- *
- * INPUTS
- * None
- *
- * RESULT
- * A boolean flag which indicates if any launches are in progress.
- *
- * SIDES
- *
- * HISTORY
- * 01-Aug-89 Creation.
- *
- * BUGS
- *
- * SEE ALSO
- * RxilLaunch(), RxilPending(), RxilFuncPending()
- */
-
- BOOL RxilCmdPending( void )
- {
- struct RxilInvocation *rxi;
-
-
- /* Make call "safe" even if RxilInit() failed */
- if( global_rdef == NULL )
- {
- return( FALSE );
- }
-
-
- for( rxi=global_rdef->Invocations; rxi; rxi=rxi->Next )
- {
- if( ( rxi->State == RXIL_STATE_PENDING ) &&
- ( rxi->Type == RXCOMM ) )
- {
- return( TRUE );
- }
- }
-
- return( FALSE );
- }
-
-
-
- /* NAME
- * RxilFuncPending
- *
- * SYNOPSIS
- * flag = RxilFuncPending();
- *
- * FUNCTION
- * If any ARexx functions have been launched via
- * a call to RxilLaunch(), and have not yet terminated, this will
- * return TRUE.
- *
- * INPUTS
- * None
- *
- * RESULT
- * A boolean flag which indicates if any launches are in progress.
- *
- * SIDES
- *
- * HISTORY
- * 01-Aug-89 Creation.
- *
- * BUGS
- *
- * SEE ALSO
- * RxilLaunch(), RxilPending(), RxilCmdPending()
- */
-
- BOOL RxilFuncPending( void )
- {
- struct RxilInvocation *rxi;
-
-
- /* Make call "safe" even if RxilInit() failed */
- if( global_rdef == NULL )
- {
- return( FALSE );
- }
-
-
- for( rxi=global_rdef->Invocations; rxi; rxi=rxi->Next )
- {
- if( ( rxi->State == RXIL_STATE_PENDING ) &&
- ( rxi->Type == RXFUNC ) )
- {
- return( TRUE );
- }
- }
-
- return( FALSE );
- }
-
-